package com.ldu.houserent.common.util;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;

/**
 * 分页工具类
 */
public class PageUtil {

    /**
     *   MyBatis分页封装
     *        pageNumber：页码
     *        pageSize：页大小，每页的数据条数
     *        sort：排序字段
     *        order：升序asc 倒序desc
     */
    public static Page initMpPage(long pageNumber,long pageSize,String sort,String order){
         if (StringUtils.isNotEmpty(sort)){     //如果排序字段不为空
            sort=camelToUnderline(sort);
         }
         if (pageNumber<1){                     //如果已经在第一页了还点击上一页
             pageNumber=1;
         }
         if (pageSize<1){                       //如果pageSize太小，则设置成一页显示6个
             pageSize=6;
         }
         if (pageSize>100){                     //如果pageSize太大，则设置成一页显示100个
             pageSize=100;
         }
         //判断倒序还是升序
         Boolean isAsc = false;         //默认排序方式是desc降序
         if (StringUtils.isEmpty(sort)){    //是否为空
            isAsc=true;
         }else {    //sort不为空
             if ("asc".equals(order.toLowerCase())){    //将order的值转换成小写与asc进行比对
                 isAsc=true;
             }
         }

        //声明page
        Page p=new Page(pageNumber,pageSize);
         if (isAsc){    //如果是升序
             p.setAsc(sort);    //则就把sort设置成升序
         }else {
             p.setDesc(sort);
         }
         return p;
    }//initMpPage

    /**
     * 按照创建时间倒序排序
     */
    public static Page initMpPage(long pageNumber,long pageSize){
        return initMpPage(pageNumber,pageSize,"createTime","desc");
    }


    /**
     *   驼峰转下划线
     */
    private static String camelToUnderline(String str){
        if (str==null || str.trim().isEmpty()){     //str是空或者str去掉空格之后是空
            return "";
        }
        int len=str.length();   //获取到字符的长度
        StringBuilder sb=new StringBuilder(len);        //把要处理的字符放入StringBuilder中
        sb.append(str.substring(0,1).toLowerCase());    //先处理第一个字符，转成小写
        for(int i=1;i<len;i++){
            char c=str.charAt(i);
            if (Character.isUpperCase(c)){
                sb.append("_");                         //添加下划线
                sb.append(Character.toLowerCase(c));    //并把该大写字符转成小写
            }else{
                sb.append(c);
            }
        }
        return sb.toString();
    }//camelToUnderline
}
